#pragma once
//#include "Hashtable.h"
//
//
//
//namespace Link_Hahs
//{
//
//template<class K,class hash = Hash<K>>
//class unordered_set
//{
//
//	struct SetKeyOfT
//	{
//		const K& operator()(const K& key)
//		{
//			return key;
//		}
//	};
//
//public:
//	typedef typename Link_Hahs::HashTable<K,K,SetKeyOfT,hash>::iterator iterator;
//
//	iterator begin()
//	{
//		return _ht.begin();
//	}
//	iterator end()
//	{
//		return _ht.end();
//	}
//
//	pair<iterator,bool> Insert(const K& key)
//	{
//		return _ht.Insert(key);
//	}
//private:
//	Link_Hahs::HashTable<K,K,SetKeyOfT,hash> _ht;
//};
//
//
//
//
//}



#include "Hashtable.h"

namespace hx
{

template<class K,class Hash = HashFunc<K>>
class UnorderdSet
{
	struct SetKeyOrValue
	{
		const K& operator()(const K& key)
		{
			return key;
		}
	};
public:
	typedef typename LinkHash::HashTable<K, const K, SetKeyOrValue, Hash>::const_iterator const_iterator;
	typedef typename LinkHash::HashTable<K, const K, SetKeyOrValue, Hash>::iterator iterator;	
	typedef LinkHash::HashData<K> Node;

	pair<iterator,bool> insert(const K& key)
	{
		return _ht.Insert(key);
	}

	iterator Find(const K& key)
	{
		return _ht.Find(key);
	}

	bool erase(const K& key)
	{
		return _ht.Erase(key);
	}

	iterator begin()
	{
		return _ht.begin();
	}

	iterator end()
	{
		return _ht.end();
	}

	const_iterator cbegin()const
	{
		return _ht.cbegin();
	}

	const_iterator cend()const
	{
		return _ht.cend();
	}


private:
	LinkHash::HashTable<K, const K, SetKeyOrValue, Hash> _ht;
};
	
}